const express = require('express');
const router = express.Router();

const { Op } = require('sequelize');

const {Article} = require('../../models');



/**
 * 查询文章列表
 * GET /admin/articles
 * 试了下
 */
router.get('/', async function (req, res) {
    try {
        const  query = req.query

        // 当前是第几页，如果不传，那就是第一页
        const currentPage = Math.abs(Number(query.currentPage)) || 1;

        // 每页显示多少条数据，如果不传，那就显示10条
        const pageSize = Math.abs(Number(query.pageSize)) || 10;

        // 计算 offset
        const offset = (currentPage - 1) * pageSize;
        const condition = {
            order: [['id', 'DESC']],

            // 在查询条件中添加 limit 和 offset
            limit: pageSize,
            offset: offset
        };

        // 如果有 title 查询参数，就添加到 where 条件中
        if(query.title) {
            condition.where = {
                title: {
                    [Op.like]: `%${query.title}%`
                }
            };
        }

        // 查询数据
        const articles = await Article.findAll(condition);

        // 返回查询结果
        res.json({
            status: true,
            message: '查询文章列表成功。',
            data: {
                articles
            }
        });
    } catch (error) {
        // 返回错误信息
        res.status(500).json({
            status: false,
            message: '查询文章列表失败。',
            errors: [error.message]
        });
    }
});

/**
 * 查询文章详情
 * GET /admin/articles/:id
 */
router.get('/:id', async function (req, res) {
    try {
        // 获取文章 ID
        const {id} = req.params;

        // 查询文章
        const article = await Article.findByPk(id);

        if (article) {
            res.json({
                status: true,
                message: '查询文章成功。',
                data: article
            });
        } else {
            res.status(404).json({
                status: false,
                message: '文章未找到。',
            });
        }
    } catch (error) {
        res.status(500).json({
            status: false,
            message: '查询文章失败。',
            errors: [error.message]
        });
    }
});

/**  * 创建文章  * POST /admin/articles  */
router.post('/', async function (req, res) {

    try {
        const body = req.body
        const article = await Article.create(req.body);

        res.status(201).json({
            status: true,
            message: '创建文章成功。',
            data: article
        });
    } catch (error) {
        res.status(500).json({
            status: false,
            message: '创建文章失败。',
            errors: [error.message]
        });
    }

})

/**  * 删除文章  * DELETE /admin/articles/id  */
router.delete('/:id', async function (req, res)  {
    try {
        const id = req.params.id
        const article = await Article.findByPk(id)

        if (article) {
            await article.destroy(id)
            res.json({
                status: true,
                message: '删除文章成功。'
            });
        } else {
            res.status(404).json({
                status: false,
                message: '文章未找到。',
            });
        }

    } catch (error) {
        res.status(500).json({
            status: false,
            message: '删除文章失败。',
            errors: [error.message]
        });
    }

 })

/**
 * 更新文章
 * PUT /admin/articles/:id
 */
router.put('/:id', async function (req, res) {
    try {
        const { id } = req.params;
        const article = await Article.findByPk(id);

        if (article) {
            await article.update(req.body);

            res.json({
                status: true,
                message: '更新文章成功。',
                data: article
            });
        } else {
            res.status(404).json({
                status: false,
                message: '文章未找到。',
            });
        }
    } catch (error) {
        if (error.name === 'SequelizeValidationError') {
            const errors = error.errors.map(e => e.message);

            res.status(400).json({
                status: false,
                message: '请求参数错误。',
                errors
            });
        } else {
            res.status(500).json({
                status: false,
                message: '创建文章失败。',
                errors: [error.message]
            });
        }

    }
});


module.exports = router;





